function ajaxPost(options) {
	var realOptions = {
		type : "POST",
		cache : false,
		error : function(request, textStatus, errorThrown) {
			try {
				var result = eval('({0})'.format(request.responseText));
				if (result) {
					// showResult(result);
				} else {
					// showError('请求发生错误！');
				}
			} catch (e) {
				// showError('请求发生错误！');
			}
		},
		async : false,
		dataType : "json",
		beforeSend : function(request) {
			request.setRequestHeader('jQueryAjaxRequest', 'true');
		},
		success : function(data) {
			try {
				if (data.message && data.message != null && data.message != "") {
					alert(data.message);
				}
			} catch (e) {
			}
		}
	};
	$.extend(realOptions, options);
	$.ajax(realOptions);
}

function isNull(str) {
	if (str.length == 0)
		return true;
	else {
		for ( var i = 0; i < str.length; i++)
			if (str.charAt(i) != " ")
				return false;
		return true;
	}
}

function email(str) {
	var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
	if (reg.test(str)) {
		return true;
	} else {
		return false;
	}
}

function showActiveNotifyRetry(params) {
	myConfirm('', '通知缓存失败, 是否重试', function() {
		$.ajax({
			url : ctx + '/sendActiveNotify',
			type : 'GET',
			dataType : 'json',
			global : false,
			data : [ {
				name : 'params',
				value : params
			} ],
			error : function(req, status, ex) {
				try {
					var ret = $.parseJSON(req.responseText);
					showActiveNotifyRetry(ret.params);
				} catch (e) {
					myalert('', '系统内部错误');
				}
			}
		});
	});
}

function showAdaptNotifyRetry(params) {
	myConfirm('', '通知缓存失败, 是否重试', function() {
		$.ajax({
			url : ctx + '/sendAdaptNotify',
			type : 'GET',
			dataType : 'json',
			global : false,
			data : [ {
				name : 'params',
				value : params
			} ],
			error : function(req, status, ex) {
				try {
					var ret = $.parseJSON(req.responseText);
					showAdaptNotifyRetry(ret.params);
				} catch (e) {
					myalert('', '系统内部错误');
				}
			}
		});
	});
}

function myConfirm(title, content, callback) {

	// clear comfirm dialog which already exists
	$("#dialog-myconfirm").remove();

	if (title == '') {
		title = "确认对话框";
	}

	// create comfirm dialog
	var html = "<div id='dialog-myconfirm' style='z-index:2000' title='" + title
			+ "'>";
	html += "<p><span class='ui-icon ui-icon-alert' style='float: left; margin: 0 7px 20px 0;'></span>"
			+ content + "</p>";
	html += "</div>";
	$('body').append(html);

	var result = false;

	// Dialog message
	$("#dialog-myconfirm").dialog({
		autoOpen : false,
		modal : true,
		// position:{ my: "center", at: "center", of: window },
		buttons : {
			'确定' : function() {
				callback();
				$(this).dialog("close");
			},
			'取消' : function() {
				$(this).dialog("close");
			}
		}
	});
	$('#dialog-myconfirm').dialog('open');
}
function myalert(title, content) {
	if (!title) {
		title = "系统提示";
	}
	if (!content) {
		content = "";
	}
	var $div = $("#_my_alert");
	if ($div.size() == 0) {
		$div = $("<div id='_my_alert'><i class='ui-icon ui-icon-alert' style='float:left;margin-right:10px;'></i> <p></p></div>");
		$div.appendTo($("body"));
		$div.dialog({
			autoOpen : false,
			modal : true,
			position : 'top',
			buttons : {
				'确定' : function() {
					$(this).dialog("close");
				}
			}
		});
	}
	$div.find("p").empty().html(content);
	$div.dialog("option", "title", title);
	$div.dialog("open");
}
function myPrompt(label, reg, val, para, callback) { // label:输入框前提示文字；reg:输入内容格式；val:输入框默认值；para:要传递的参数；
	$("#dialog-myprompt").remove(); // callback两个参数，传递的参数para和用户输入的值
	// create comfirm dialog
	var html = "<div id='dialog-myprompt' style='z-index:1050;' title='输入对话框 '>";
	html += '<p id="dialog-myprompt-info" style="display: none; color: red;">输入格式不正确！</p>';
	html += "<p><span class='ui-icon ui-icon-alert' style='float: left; margin: 0 7px 20px 0;'></span>"
			+ label + "</p>";
	html += "<input id='dialog-myprompt-input' type='text'/>";
	html += "</div>";
	$('body').append(html);

	var result = false;

	// Dialog message
	$("#dialog-myprompt").dialog({
		autoOpen : false,
		modal : true,
		position : 'top',
		// position:{ my: "center", at: "center", of: window },
		buttons : {
			'确定' : function() {
				if (reg.test($("#dialog-myprompt-input").val())) {
					$(this).dialog("close");
					callback && callback(para, $("#dialog-myprompt-input").val());
				} else {
					$("#dialog-myprompt-info").show();
				}

			},
			'取消' : function() {
				$(this).dialog("close");
			}
		}
	});
	$("#dialog-myprompt-input").val(val);
	$('#dialog-myprompt').dialog('open');
}
function getMyDatepicker(callback) {
	$("#dialog-datepicker").remove();
	// create comfirm dialog
	var html = "";
	html += '<p id="dialog-datepicker-info" style="display: none; color: red;"></p>';
	html += "<p><span class='ui-icon ui-icon-alert' style='float: left; margin: 0 7px 20px 0;'></span>设置开始时间</p>";
	html += '<input type="text" id="dialog-datepicker-startInput" readOnly="true" style="cursor:pointer" onFocus="WdatePicker({isShowClear:false,readOnly:true, startDate:\'%y-%M-01 00:00:00\',dateFmt:\'yyyy-MM-dd HH:mm:ss\'})"/>';
	html += "<p><span class='ui-icon ui-icon-alert' style='float: left; margin: 0 7px 20px 0;'></span>设置结束时间</p>";
	html += '<input type="text" id="dialog-datepicker-endInput" style="cursor:pointer" readOnly="true" onFocus="WdatePicker({isShowClear:false,readOnly:true, startDate:\'%y-%M-01 00:00:00\',dateFmt:\'yyyy-MM-dd HH:mm:ss\'})"/>';

	$('body').append("<div id='dialog-datepicker' title='设置有效期'></div>");

	// Dialog message
	$("#dialog-datepicker").dialog({
		autoOpen : false,
		modal : true,
		open : function() {
			$("#dialog-datepicker").html(html);
		},
		close : function() {
			$("#dialog-datepicker").empty();
		},
		buttons : {
			'确定' : function() {
				callback();
			},
			'取消' : function() {
				$(this).dialog("close");
			}
		}
	});
	$('#dialog-datepicker').dialog('open');
}

function channelCateBind(pId, cateId, productId, platformId, queryFlag) {
	var channelCates = [];
	$.ajax({
		url : ctx + '/globalChannel/allCategorys',
		type : 'POST',
		dataType : 'json',
		data : {
			productId : $("#" + productId).val() || "",
			platformId : $("#" + platformId).val() || ""
		},
		async : false,
		success : function(data) {
			channelCates = data;
		}
	});
	var $p = $("#" + pId), $cate = $("#" + cateId);
	$p.empty();
	if (queryFlag) {
		$p.append("<option value=''>选择大类</option>");
	}
	$.each(channelCates, function(i, a) {
		if (!a.parentId) {
			$p
					.append("<option value='{0}'>{1}</option>".format(a.id,
							a.categoryName));
		}
	});

	function getCates(pid) {
		var ret = [];
		if (!pid) {
			$.each(channelCates, function(i, a) {
				if (a.parentId) {
					ret.push(a);
				}
			});
		} else {
			$.each(channelCates, function(i, a) {
				if (pid == a.parentId) {
					ret.push(a);
				}
			});
		}
		return ret;
	}
	function initCate(cascade) {
		$cate.empty();
		$cate.data('cascade', cascade);
		if (queryFlag) {
			$cate.append("<option value=''>选择小类</option>");
		}
		$.each(getCates(cascade ? $p.val() : ''), function(i, a) {
			$cate.append("<option value='{0}'>{1}</option>".format(a.id,
					a.categoryName));
		});
	}
	;
	initCate(true);
	$p.change(function() {
		initCate(true);
	});
	if (!queryFlag) {
		setInterval(function() {
			if ($p.is(":hidden")) {
				initCate(false);
			} else {
				var cas = $cate.data('cascade');
				if (typeof cas == 'boolean' && !cas) {
					var val = $cate.val();
					initCate(true);
					$cate.val(val);
				}
			}
		}, 1000);
	}

}

function productAndOSBind(bizID, osID, queryFlag) {
	var $biz = $("#" + bizID), $os = $("#" + osID);
	$biz.empty();
	if (queryFlag) {
		$biz.append("<option value=''>选择产品</option>");
	}
	$.each(initData.products, function(i, a) {
		$biz.append("<option value='{0}' num='{2}'>{1}</option>".format(a.id,
				a.cnName, a.bizNumber));
	})

	function getPlatforms(pid) {
		if (!pid) {
			return initData.platforms;
		}
		var pfs = [];
		$.each(initData.productAndPlatforms, function(i, a) {
			if (a.productId == pid && platforms[a.platformId]) {
				pfs.push(platforms[a.platformId]);
			}
		});
		pfs.sort(function(a, b) {
			if (a.id == 'Android')
				return -1;
			if (b.id == 'Android')
				return 1;
		});
		return pfs;
	}
	function initPlatform(cascade) {
		$os.empty();
		$os.data('cascade', cascade);
		if (queryFlag) {
			$os.append("<option value=''>选择平台</option>");
		}
		$.each(getPlatforms(cascade ? $biz.val() : ''), function(i, a) {
			$os.append("<option value='{0}' num='{2}'>{1}</option>".format(a.id,
					a.id, a.pfNumber));
		});
	}
	;
	initPlatform(false);
	$biz.change(function() {
		initPlatform(true);
	});
	if (!queryFlag) {
		setInterval(function() {
			if ($biz.is(":hidden")) {
				initPlatform(false);
			} else {
				var cas = $os.data('cascade');
				if (typeof cas == 'boolean' && !cas) {
					var val = $os.val();
					initPlatform(true);
					$os.val(val);
					$os.trigger("change");
				}
			}
		}, 800);
	}
}

function matchVersion(ver) {
	return /^\d{1}\.\d{1}\.\d{4}(\.\S+)?$/.test(ver);
}

function matchChannelNo(channelNo) {
	return /^\d{8}$/.test(channelNo);
}

function compareVersion(ver1, ver2) {
	ver1 = ver1 || "0.0.0000";
	ver2 = ver2 || "9.9.9999";
	var version1 = ver1.replace(/[a-zA-Z]+/g, "");
	var version2 = ver2.replace(/[a-zA-Z]+/g, "");
	var verArr1 = version1.split('.');
	var verArr2 = version2.split('.');
	var minLength = Math.min(verArr1.length, verArr2.length);
	for ( var i = 0; i < minLength; i++) {
		var flag = 0;
		try{
			flag = parseInt(verArr1[i]) - parseInt(verArr2[i]);
		}catch(e){}
		if (flag != 0) {
			return flag;
		}
	}
	return 0;
}

// 给Date类型增加格式化原型方法
Date.prototype.format = function(format) {
	var o = {
		"M+" : this.getMonth() + 1, // month
		"d+" : this.getDate(), // day
		"h+" : this.getHours(), // hour
		"m+" : this.getMinutes(), // minute
		"s+" : this.getSeconds(), // second
		"q+" : Math.floor((this.getMonth() + 3) / 3), // quarter
		"S" : this.getMilliseconds()
	// millisecond
	}
	if (/(y+)/.test(format))
		format = format.replace(RegExp.$1, (this.getFullYear() + "")
				.substr(4 - RegExp.$1.length));
	for ( var k in o)
		if (new RegExp("(" + k + ")").test(format))
			format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
					: ("00" + o[k]).substr(("" + o[k]).length));
	return format;
}

Array.prototype.indexOf = function(obj) {
	for ( var i = 0; i < this.length; i++) {
		if (obj == this[i]) {
			return i;
		}
	}
	return -1;
};

String.prototype.format = function() {
	var args = arguments;
	return this.replace(/\{(\d+)\}/g, function(m, i) {
		return args[i];
	});
}

String.prototype.endWith = function(str) {
	if (str == null || str == "" || this.length == 0 || str.length > this.length)
		return false;
	if (this.substring(this.length - str.length) == str)
		return true;
	else
		return false;
	return true;
}
String.prototype.startWith = function(str) {
	if (str == null || str == "" || this.length == 0 || str.length > this.length)
		return false;
	if (this.substr(0, str.length) == str)
		return true;
	else
		return false;
	return true;
}

$(function() {
	$(document).ajaxError(function(evt, req, opts, ex) {
		if (req.status === 0 || req.readyState === 0) {
			location.reload(true);
			return;
		}
		if (req.status === 404) {
			myalert('', '没有找到');
			return;
		}
		try {
			var result = $.parseJSON(req.responseText);
			myalert('', result.msg);
		} catch (e) {
			myalert('', '系统内部错误');
		}
	}).ajaxSend(function(evt, request, settings) {
		var target = settings.maskTarget;
		if (settings.maskTarget) {
			$(settings.maskTarget).unmask();
			$(settings.maskTarget).mask("加载中...", 500);
		}
	}).ajaxComplete(function(event, request, settings) {
		var target = settings.maskTarget;
		if (settings.maskTarget) {
			$(settings.maskTarget).unmask();
		}
	});
});
/**
 * @desc json格式化
 */
function track(action) {
	if (typeof _gaq !== 'undefined') {
		_gaq.push([ '_trackEvent', 'JSON', action ]);
	}
}
/**
 * @desc 打印基本信息tab栏里的body
 */
function printBasicJSON(data) {
	$('#basic_request_body').val(JSON.stringify(data));
}
/**
 * @desc 更新基本信息tab栏里的body
 */
function updateBasicJSON(data) {
	printBasicJSON(data);
}
/**
 * @desc 打印http测试tab栏里的body
 */
function printTestJSON(data) {
	$('#api_test_body').val(JSON.stringify(data));
}
/**
 * @desc 更新http测试tab栏里的body
 */
function updateTestJSON(data) {
	printTestJSON(data);
}
/**
 * @desc 同步dubbo信息
 */
function synDubboMsg() {
	var e = $("#dubbo_service_url").empty();
	e.append("<option value=''>选择组件地址</option>");
	$.ajax({
		type : "POST",
		url : ctx + "/web/base/comUrlListMg",
		data : {
			code : $("#basic_com_code").val()
		},
		async : false,
		success : function(data) {
			$.each(data, function(i, a) {
				e.append("<option value='{0}'>{1}</option>".format(a, a));
			});
			$("#dubbo_service_url").selectpicker('refresh');
			$("#dubbo_service_url").selectpicker('render');
		}
	});

	$('#basic_cate_code').change(function() {
		$('#dubbo_class').val($(this).val());
	})
	
	//测试用例无此功能
	$('#basic_dubbo_execute_type').change(function() {
		//$('#api_test_type').selectpicker('val',$(this).val());
		$('#dubbo_execute_type').val($(this).val());
	})

	$('#basic_url').change(function() {
		$('#dubbo_location').val($(this).val());
	})

	$('#basic_request_body').change(function() {
		$('#dubbo_params').val($(this).val());
	})
}
/**
 * @desc 同步http信息
 */
function synHttpMsg() {
	var f = $("#api_test_url").empty();
	f.append("<option value=''>选择组件地址</option>");
	$.ajax({
		type : "POST",
		url : ctx + "/web/base/comUrlListMg",
		data : {
			code : $("#basic_com_code").val()
		},
		async : false,
		success : function(data) {
			$.each(data, function(i, a) {
				f.append("<option value='{0}'>{1}</option>".format(a, a));
			});
			$("#api_test_url").selectpicker('refresh');
			$("#api_test_url").selectpicker('render');
		}
	});
	//测试用例无此功能
	$('#basic_url').change(function() {
		$('#api_test_location').val($(this).val());
	})
	//测试用例无此功能
	$('#basic_request_type').change(function() {
		$('#api_test_type').selectpicker('val',$(this).val());
		//$('#api_test_type').val($(this).val());
	})

	$('#basic_params').change(function() {
		renderCastParam(getParamValue());
	})
	
	$('#basic_params').change(function() {
		renderDubboParam(getParamValue());
	})

	$('#basic_headers').change(function() {
		renderCastHeader(getHeaderValue());
	})

	$('#basic_request_body').change(function() {
		$('#api_test_body').val($(this).val());
	})
}
/**
 * @desc 获取基本信息url参数
 */
function getParamValue() {
	var headerArr = [];
	$('#paramGroup div').each(function(i, e) {
		var headerObj = {};
		headerObj['key'] = $(e).find('input:nth-child(1)').val();
		headerObj['value'] = $(e).find('input:nth-child(2)').val();
		headerArr.push(headerObj);
	})
	return headerArr;
}
/**
 * @desc 获取基本信息头部
 */
function getHeaderValue() {
	var headerArr = [];
	$('#headerGroup div').each(function(i, e) {
		var headerObj = {};
		headerObj['key'] = $(e).find('input:nth-child(1)').val();
		headerObj['value'] = $(e).find('input:nth-child(2)').val();
		headerArr.push(headerObj);
	})
	return headerArr;
}
/**
 * @desc 同步基本信息头部
 */
function renderCastHeader(headerArrParam) {
	var htmlStr = "";
	$(headerArrParam)
			.each(
					function(i, ele) {
						if (i == 0) {
							htmlStr += '<div id="testHeader" style="margin-top:10px;"><input type="text" id="api_test_hkey_'
									+ (++i)
									+ '" name="hkey"  class="input-medium" style="width:150px;" value="'
									+ ele['key']
									+ '"/><input type="text" id="api_test_hvalue_'
									+ (++i)
									+ '" name="hvalue"  class="input-medium" style="width:150px;margin-left:5px;" value="'
									+ ele['value']
									+ '" /><i name="addTestHeader" class="icon-plus-sign" style="margin-left:8px;" onclick="addTestHeader()"></i> </div>';
						} else {
							htmlStr += '<div id="testHeader" style="margin-top:10px;"><input type="text" id="api_test_hkey_'
									+ (++i)
									+ '" name="hkey"  class="input-medium" style="width:150px;" value="'
									+ ele['key']
									+ '"/><input type="text" id="api_test_hvalue_'
									+ (++i)
									+ '" name="hvalue"  class="input-medium" style="width:150px;margin-left:5px;" value="'
									+ ele['value']
									+ '" /><i name="addTestHeader" class="icon-plus-sign" style="margin-left:8px;" onclick="addTestHeader()"></i> <i name="minusTestHeader" class="icon-minus-sign"></i></div>';
						}
					})
	$("#testHeaderGroup").html(htmlStr);
	bindTestHeaderListener();
}
/**
 * @desc 同步基本信息url参数
 */
function renderCastParam(headerArrParam) {
	var htmlStr = "";
	$(headerArrParam)
			.each(
					function(i, ele) {
						if (i == 0) {
							htmlStr += '<div id="testParam" style="margin-top:10px;"><input type="text" id="api_test_pkey_'
									+ (++i)
									+ '" name="pkey"  class="input-medium" style="width:150px;" value="'
									+ ele['key']
									+ '"/><input type="text" id="api_test_pvalue_'
									+ (++i)
									+ '" name="pvalue"  class="input-medium" style="width:150px;margin-left:5px;" value="'
									+ ele['value']
									+ '" /><i name="addTestParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addTestParam()"></i> </div>';
						} else {
							htmlStr += '<div id="testParam" style="margin-top:10px;"><input type="text" id="api_test_pkey_'
									+ (++i)
									+ '" name="pkey"  class="input-medium" style="width:150px;" value="'
									+ ele['key']
									+ '"/><input type="text" id="api_test_pvalue_'
									+ (++i)
									+ '" name="pvalue"  class="input-medium" style="width:150px;margin-left:5px;" value="'
									+ ele['value']
									+ '" /><i name="addTestParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addTestParam()"></i> <i name="minusTestParam" class="icon-minus-sign"></i></div>';
						}
					})
	$("#testParamGroup").html(htmlStr);
	bindTestParamListener();
}
/**
 * @desc 同步基本信息Dubbourl参数
 */
function renderDubboParam(headerArrParam) {
	var htmlStr = "";
	$(headerArrParam)
			.each(
					function(i, ele) {
						if (i == 0) {
							htmlStr += '<div id="dubboParam" style="margin-top:10px;"><input type="text" id="api_dubbo_pkey_'
									+ (++i)
									+ '" name="pkey"  class="input-medium" style="width:150px;" value="'
									+ ele['key']
									+ '"/><input type="text" id="api_dubbo_pvalue_'
									+ (++i)
									+ '" name="pvalue"  class="input-medium" style="width:150px;margin-left:5px;" value="'
									+ ele['value']
									+ '" /><i name="addDubboParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addDubboParam()"></i> </div>';
						} else {
							htmlStr += '<div id="dubboParam" style="margin-top:10px;"><input type="text" id="api_dubbo_pkey_'
									+ (++i)
									+ '" name="pkey"  class="input-medium" style="width:150px;" value="'
									+ ele['key']
									+ '"/><input type="text" id="api_dubbo_pvalue_'
									+ (++i)
									+ '" name="pvalue"  class="input-medium" style="width:150px;margin-left:5px;" value="'
									+ ele['value']
									+ '" /><i name="addDubboParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addDubboParam()"></i> <i name="minusDubboParam" class="icon-minus-sign"></i></div>';
						}
					})
	$("#dubboParamGroup").html(htmlStr);
	bindDubboParamListener();
}
/**
 * @desc 监听dubbo测试url参数事件
 */
function bindDubboParamListener() {
	$("i[name=minusDubboParam]").unbind().click(function() {
		$(this).parent().remove();
	});
}
/**
 * @desc 监听http测试url参数事件
 */
function bindTestParamListener() {
	$("i[name=minusTestParam]").unbind().click(function() {
		$(this).parent().remove();
	});
}
/**
 * @desc 增加http测试头部
 */
function addTestHeader() {
	var i = 0;
	$("#testHeaderGroup")
			.append(
					'<div id="testHeader" style="margin-top:10px;"><input type="text" id="api_test_hkey_'
							+ (++i)
							+ '" name="hkey"  class="input-medium" style="width:150px;"/><input type="text" id="api_test_hvalue_'
							+ (++i)
							+ '" name="hvalue"  class="input-medium" style="width:150px;margin-left:5px;"/><i name="addTestHeader" class="icon-plus-sign" style="margin-left:8px;" onclick="addTestHeader()"></i> <i name="minusTestHeader" class="icon-minus-sign"></i></div>');
	bindTestHeaderListener();
}
/**
 * @desc 监听http测试头部事件
 */
function bindTestHeaderListener() {
	$("i[name=minusTestHeader]").unbind().click(function() {
		$(this).parent().remove();
	});
}
/**
 * @desc 增加http测试url参数
 */
function addTestParam() {
	var i = 0;
	$("#testParamGroup")
			.append(
					'<div id="testParam" style="margin-top:10px;"><input type="text" id="api_test_pkey_'
							+ (++i)
							+ '" name="pkey"  class="input-medium" style="width:150px;"/><input type="text" id="api_test_pvalue_'
							+ (++i)
							+ '" name="pvalue"  class="input-medium" style="width:150px;margin-left:5px;"/><i name="addTestParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addTestParam()"></i> <i name="minusTestParam" class="icon-minus-sign"></i></div>');
	bindTestParamListener();
}
/**
 * @desc 监听基本信息url参数事件
 */
function bindParamListener() {
	$("i[name=minusParam]").unbind().click(function() {
		$(this).parent().remove();
	});
}
/**
 * @desc 增加基本信息url参数
 */
function addParam() {
	var i = 0;
	$("#paramGroup")
			.append(
					'<div id="param" style="margin-top:10px;"><input type="text" id="basic_pkey_'
							+ (++i)
							+ '" name="pkey"  class="input-medium" style="width:150px;"/><input type="text" id="basic_pvalue_'
							+ (++i)
							+ '" name="pvalue"  class="input-medium" style="width:150px;margin-left:5px;"/><i name="addParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addParam()"></i> <i name="minusParam" class="icon-minus-sign"></i></div>');
	bindParamListener();
}
/**
 * @desc 监听头部事件
 */
function bindHeaderListener() {
	$("i[name=minusHeader]").unbind().click(function() {
		$(this).parent().remove();
	});
}
/**
 * @desc 监听头部事件
 */
function addHeader() {
	var i = 0;
	$("#headerGroup")
			.append(
					'<div id="header" style="margin-top:10px;"><input type="text" id="basic_hkey_'
							+ (++i)
							+ '" name="hkey"  class="input-medium" style="width:150px;"/><input type="text" id="basic_hvalue_'
							+ (++i)
							+ '" name="hvalue"  class="input-medium" style="width:150px;margin-left:5px;"/><i name="addHeader" class="icon-plus-sign" style="margin-left:8px;" onclick="addHeader()"></i> <i name="minusHeader" class="icon-minus-sign"></i></div>');
	bindHeaderListener();
}
/**
 * @desc 解析url参数和头部
 * @param urlParams
 * @param requestHeaders
 */
function showParamsAndHeaders(urlParams, requestHeaders) {
	var pstrs = new Array(); // 定义一数组
	pstrs = urlParams.split("&"); // 字符分割
	for (var i = 0; i < pstrs.length; i++) {
		var kv = new Array();
		kv = pstrs[i].split("=");
		if (i > 0) {
			$("#paramGroup")
					.append(
							'<div id="param" style="margin-top:10px;"><input type="text" id="basic_pkey_'
									+ i
									+ '" name="pkey[]"  class="input-medium" style="width:150px;"/><input type="text" id="basic_pvalue_'
									+ i
									+ '" name="pvalue[]"  class="input-medium" style="width:150px;margin-left:5px;"/><i name="addParam" class="icon-plus-sign" style="margin-left:8px;" onclick="addParam()"></i> <i name="minusParam" class="icon-minus-sign"></i></div>');
			bindParamListener();
		}
		$("#basic_pkey_" + i).val(kv[0]);
		$("#basic_pvalue_" + i).val(kv[1]);
	}
	var hstrs = new Array(); 
	hstrs = requestHeaders.split(",");
	for (var i = 0; i < pstrs.length; i++) {
		var kv = new Array();
		kv = hstrs[i].split(":");
		if (i > 0) {
			$("#headerGroup")
					.append(
							'<div id="header" style="margin-top:10px;"><input type="text" id="basic_hkey_'
									+ i
									+ '" name="hkey[]"  class="input-medium" style="width:150px;"/><input type="text" id="basic_hvalue_'
									+ i
									+ '" name="hvalue[]"  class="input-medium" style="width:150px;margin-left:5px;"/><i name="addHeader" class="icon-plus-sign" style="margin-left:8px;" onclick="addHeader()"></i> <i name="minusHeader" class="icon-minus-sign"></i></div>');
			bindHeaderListener();
		}
		$("#basic_hkey_" + i).val(kv[0]);
		$("#basic_hvalue_" + i).val(kv[1]);
	}
}
/**
 * @desc 初始化jsonEditor插件信息
 */
function initJSONEditor() {
	$('#beautify').click(
			function(evt) {
				track('Beautify');
				evt.preventDefault();
				var jsonText = $('#basic_request_body').val();
				$('#basic_request_body').val(
						JSON.stringify(JSON.parse(jsonText), null, 4));
			});

	$('#uglify').click(function(evt) {
		track('Uglify');
		evt.preventDefault();
		var jsonText = $('#basic_request_body').val();
		$('#basic_request_body').val(JSON.stringify(JSON.parse(jsonText)));
	});
	
	$('#httpbody1').click(
			function(evt) {
				track('Beautify');
				evt.preventDefault();
				var jsonText = $('#api_test_body').val();
				$('#api_test_body').val(
						JSON.stringify(JSON.parse(jsonText), null, 4));
			});

	$('#httpbody2').click(function(evt) {
		track('Uglify');
		evt.preventDefault();
		var jsonText = $('#api_test_body').val();
		$('#api_test_body').val(JSON.stringify(JSON.parse(jsonText)));
	});
	
	$('#httpresult1').click(
			function(evt) {
				track('Beautify');
				evt.preventDefault();
				var jsonText = $('#api_test_result').val();
				$('#api_test_result').val(
						JSON.stringify(JSON.parse(jsonText), null, 4));
			});

	$('#httpresult2').click(function(evt) {
		track('Uglify');
		evt.preventDefault();
		var jsonText = $('#api_test_result').val();
		$('#api_test_result').val(JSON.stringify(JSON.parse(jsonText)));
	});
	
	$('#dubbobody1').click(
			function(evt) {
				track('Beautify');
				evt.preventDefault();
				var jsonText = $('#dubbo_params').val();
				$('#dubbo_params').val(
						JSON.stringify(JSON.parse(jsonText), null, 4));
			});

	$('#dubbobody2').click(function(evt) {
		track('Uglify');
		evt.preventDefault();
		var jsonText = $('#dubbo_params').val();
		$('#dubbo_params').val(JSON.stringify(JSON.parse(jsonText)));
	});
	
	$('#dubboresult1').click(
			function(evt) {
				track('Beautify');
				evt.preventDefault();
				var jsonText = $('#dubbo_result').val();
				$('#dubbo_result').val(
						JSON.stringify(JSON.parse(jsonText), null, 4));
			});

	$('#dubboresult2').click(function(evt) {
		track('Uglify');
		evt.preventDefault();
		var jsonText = $('#dubbo_result').val();
		$('#dubbo_result').val(JSON.stringify(JSON.parse(jsonText)));
	});

	$('#basic_request_body').change(function() {
		var val = $('#basic_request_body').val();
		$('#basic_editor').jsonEditor(JSON.parse(val), {
			change : updateBasicJSON
		});
	});

	$('#api_test_body').change(function() {
		var val = $('#api_test_body').val();
		$('#api_test_editor').jsonEditor(JSON.parse(val), {
			change : updateTestJSON
		});
	});
}
/**
 * @desc 错误提示信息
 * @param id
 * @param content
 */
function errorPrompt(id, content) {
	$(id).find(".text-error").remove();
	$(id).find(".body").prepend("<p class='text-error'>" + content + "</p>");
}

/**
 * @desc 表格的双击缩放效果时需要的文本宽度计算
 * @param fontSize
 * @param text
 */
function textSize(fontSize, text) {
    var span = document.createElement("span");
    var width = span.offsetWidth;
    span.style.position="fixed";
    span.style.left="0";
    span.style.fontSize=fontSize;
    span.style.visibility = "hidden";
    document.body.appendChild(span);
    if (typeof span.textContent != "undefined")
        span.textContent = text;
    else span.innerText = text;
    width = span.offsetWidth - width;
    span.parentNode.removeChild(span);
    return width;
}

/**
 * @desc dataTabke双击设置宽度
 * @param table
 * @param start
 * @param end
 */
function AutoWidth(table,start,end){
	$(table+">tbody>tr>td").on('dblclick',function () {
		if(this.cellIndex>=start&&this.cellIndex<=end){	
			wideindex=this.cellIndex;
			if($(table+">thead>tr>th").eq(wideindex).hasClass("wide")){
				var wid = $(table+">thead>tr>th").eq(wideindex).attr("width_old");
				$(table+">thead>tr>th").eq(wideindex).width(wid);
				$(table+">tbody>tr").each(function(){
					$(this).find("td").eq(wideindex).width(wid);
				});
				$(table+">thead>tr>th").eq(wideindex).removeClass("wide");
				$(table+">thead>tr>th").eq(wideindex).removeAttr("width_old");
			}else{
				var width_old=$(table+">tbody>tr:eq(0)>td").eq(wideindex).width();
				var maxsize=0;	
				$(table+">tbody>tr>td:nth-child("+(wideindex+1)+")").each(function(){
  					FontSize = $(this).css("font-size"); 
					content = $(this).text();
					contentwidth=textSize(FontSize,content);
					if(contentwidth>maxsize){
						maxsize=contentwidth;
					}
				});
				if(maxsize>width_old){
					$(table+">thead>tr>th").eq(wideindex).width(maxsize+20);
					$(table+">tbody>tr").each(function(){
						$(this).find("td").eq(wideindex).width(maxsize+20);
					});
					$(table+">thead>tr>th").eq(wideindex).addClass("wide").attr("width_old",width_old);
				}
			}
		}
});	
}
